/*
 * EvaluateAccion.java
 *
 * Created on 21 de mayo de 2008, 05:04 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.forrest.strategy;

import futbol.forrest.gemetry.VecPosition;
import futbol.forrest.utils.Types.AccionT;
import futbol.forrest.worldModel.StateVariable;

/**
 *
 * @author d157743
 */
public class EvaluateAccion {
    
    /** Creates a new instance of EvaluateAccion */
    public EvaluateAccion() {
    }
    
    public double getEvaluation( AccionT accion, VecPosition posInicial, VecPosition posFinal){
        return getEvaluation(accion, posInicial, posFinal, null);
    }
    
    public double getEvaluation( AccionT accion, VecPosition posInicial, VecPosition posFinal, Double angPateo ){
            double utilidad, facPateo, angPateoTemp = 0;

            if ( accion == AccionT.ACCION_SCORE ){ //se que angPateo != NULL            
                //calculo la utilidad en base al pto donde estoy parado....me devuelve el angulo de pateo
                utilidad = Utility.getUtility(posInicial, angPateo); 
                if ( utilidad > 90 )
                        utilidad = Utility.getMaxUtility();
            }	
            else if ( accion ==AccionT.ACCION_CLEARBALL ){
                //Como se calcula la evaluacion del CLEARBALL:
                //Si el jugador no esta en posicion de ataque => le doy la minima evaluacion ya que quiero que haga un clear ball
                //unicamente si no tiene otra cosa para hacer
                //Si estoy en sona de ataque y tengo angulo optimo (getFScore = 1) => igual al caso anterior
                //Si el angulo no es optimo => voy a preferir hacer un clear ball (generalmente un centro al medio del area) 
                //antes de patear al arco => la eval del clear ball tiene que ser mayor que la del Socre

                if (StateVariable.isAttackPosition(posInicial) ){			
                    facPateo = Utility.getFScore(posInicial, angPateoTemp);

                    if (facPateo != 1)
                        utilidad = Utility.getUtility( posInicial, angPateoTemp ) + 1;	
                    else
                        utilidad = Utility.getMinUtility();
                }else
                    utilidad = Utility.getMinUtility();

            }else
                utilidad = Utility.getUtility(posFinal, null);

            return utilidad;	
    }

    public double getMaxEvaluation(){
        return Utility.getMaxUtility();
    }


    public double getMinEvaluation( ){
        return Utility.getMinUtility();
    }    
}
